#ifndef BUS_H
#define BUS_H

/**
 * 总线
 * 主要的功能是负责连接虚拟机的各个部件
 */ 
template<
    typename word_t,   // 机器字长
    typename cpu_t ,   // CPU 部件
    typename mem_t ,   // 内存部件
    typename disk_t,   // 磁盘部件
    typename mdev_t    // 外设部件
>
class BUS
{
private:
    static cpu_t&  cpu;
    static mem_t&  mem;
    static disk_t& disk;
    static mdev_t& dev;
public:
    static void   init();

    static word_t rfm(word_t);              // read from memory  
    static word_t rfk();                    // read from keyboard
    static void   wtm(word_t, word_t);      // write to memory
    static char   icfd();                   // input char from dev
    static void   octd(char);               // output char to dev
    static void   ostd(const char *);       // output string to dev
    static void   ftd();                    // flush to dev
    static int    skc();                    // strike key check
    static void   lifd();                   // load image from disk
};

#endif